package com.hank.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtils {

    public static final SimpleDateFormat TIME_FORMAT=
            new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public static final SimpleDateFormat DATE_FORMAT=
            new SimpleDateFormat("yyyy-MM-dd");
    public static ThreadLocal<SimpleDateFormat> simpleDateFormatThreadLocal=new ThreadLocal<SimpleDateFormat>(){
        @Override
        protected SimpleDateFormat initialValue() {
            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        }
    };

    /**
     * 判断一个时间是否在另外一个时间之前
     * @param time1 第一个时间
     * @param time2 第二个时间
     * @return 判断结果
     */
    public static boolean before(String time1,String time2){
        try {
            Date dateTime1 =TIME_FORMAT.parse(time1);
            Date dateTime2 =TIME_FORMAT.parse(time2);
            if(dateTime1.before(dateTime2)){
                return true;
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 判断一个时间是否再另外一个时间之后
     * @param time1 第一个时间
     * @param time2 第二个时间
     * @return
     */
    public static boolean after(String time1,String time2){
        try {
            Date dateTime1 = TIME_FORMAT.parse(time1);
            Date dateTime2 = TIME_FORMAT.parse(time2);
            if(dateTime1.after(dateTime2)){
                return true;
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return false;
    }

    /**
     * 计算时间差值(单位为秒)
     * @param time1  时间1
     * @param time2  时间2
     * @return 差值
     */
    public static int mimus(String time1,String time2){
        try {
            Date dateTime1 = TIME_FORMAT.parse(time1);
            Date dateTime2 = TIME_FORMAT.parse(time2);

            long millisecond = dateTime1.getTime()-dateTime2.getTime();

            return Integer.valueOf(String.valueOf(millisecond/1000));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return 0;
    }

    /**
     * 获取当天日期(yyyy-MM-dd)
     * @return当天日期
     */
    public static String getTodayDate(){
        return DATE_FORMAT.format(new Date());
    }

    /**
     * 获取昨天得日期(yyyy-MM-dd)
     * @return昨天得日期
     */
    public static String getYesterdayDate(){
        Calendar cal= Calendar.getInstance();
        cal.setTime(new Date());
        cal.add(Calendar.DAY_OF_YEAR,-1);

        Date date = cal.getTime();
        return DATE_FORMAT.format(date);
    }

    /**
     * 格式化日期(yyyy-MM-dd)
     * @param date Date对象
     * @return 格式化后的日期
     */
    public static String formatDate(Date date){
        return DATE_FORMAT.format(date);
    }

    /**
     * 格式化时间(yyyy-MM-dd HH:mm:ss)
     * @param date Date对象
     * @return 格式化之后得时间
     */
    public static String formatTime(Date date){
        return TIME_FORMAT.format(date);
    }

    public static Date parseTime(String time)
    {
        try {
            Date result=simpleDateFormatThreadLocal.get().parse(time);
            simpleDateFormatThreadLocal.remove();
            return result;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
}
